package club.xiaojiawei.array;

import java.util.Arrays;

/**
 * @author 肖嘉威
 * @version 1.0
 * @date 6/16/22 2:09 PM
 * @question 922. 按奇偶排序数组 II
 * @description 给定一个非负整数数组 nums，  nums 中一半整数是 奇数 ，一半整数是 偶数 。
 * 对数组进行排序，以便当 nums[i] 为奇数时，i 也是 奇数 ；当 nums[i] 为偶数时， i 也是 偶数 。
 * 你可以返回 任何满足上述条件的数组作为答案 。
 */
public class SortArrayByParityII922 {

    public static void main(String[] args) {
        SortArrayByParityII922 test = new SortArrayByParityII922();
        int[] result = test.sortArrayByParityII(new int[]{4,2,5,7});
        System.out.println(Arrays.toString(result));
    }

    /**
     * 双指针
     * 时间复杂度：O(N)
     * 空间复杂度：O(1)
     * @param nums
     * @return
     */
    public int[] sortArrayByParityII(int[] nums) {
        int length = nums.length;
        int evenPoint = 1;
        int temp;
        for (int oddPoint = 0; oddPoint < length; oddPoint += 2) {
            if ((nums[oddPoint] & 1) == 1){
                for (; evenPoint < length; evenPoint += 2){
                    if ((nums[evenPoint] & 1) ==  0){
                        temp = nums[evenPoint];
                        nums[evenPoint] = nums[oddPoint];
                        nums[oddPoint] = temp;
                        evenPoint += 2;
                        break;
                    }
                }
            }
        }
        return nums;
    }
}
